package com.ali.gts.exceptionHandler;

import com.ali.gts.exception.GlobalException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

/**
 * 表示当前是异常的处理类，放在类上面
 */
@ControllerAdvice
public class GlobalExceptionHandler {

    Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    //定义异常的方法，当异常发生后，执行这个方法
    //方法的定义和controller类中的定义方法一样。返回值和Controller中定义方法形式是一样的

    /**
     *
     * @param e
     * @return
     */
    @ExceptionHandler(value = {GlobalException.class,NullPointerException.class,RuntimeException.class})
    public ModelAndView doException(Exception e){
        logger.error("发生了异常异常信息是{}",e.getMessage());
        /**
         * 发生异常的话我们可以做如下的工作
         * 1、 记录异常的日志
         * 2、 发邮件等通知客户
         * 3、给前端一个友好的提示
         */
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("tips","服务器忙请稍后重拾");
        modelAndView.setViewName("globalError");
        return modelAndView;

    }

    //处理一些我们不知道的异常
    @ExceptionHandler
    public ModelAndView doOrtherException(Exception e){
        logger.error("发生了异常异常信息是{}",e.getMessage());
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("tips","未知异常");
        modelAndView.setViewName("globalError");
        return modelAndView;

    }

}
